package com.sanyue.dualPointer;

import org.junit.Test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

/**
 * @author sanyue
 * @version 1.0
 * @description: TODO-3
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * @date 2022/1/23 下午12:15
 */
public class LongestSubstringWithoutRepeatingCharacters {

    @Test
    public void solve(){
        int i = lengthOfLongestSubstring("abcabcbb");
        System.out.println("i:"+i);
    }

    //6 ms, 在所有 Java 提交中击败了66.64%的用户
    public int lengthOfLongestSubstring(String s) {
        int ans = 0;
        HashMap<Character, Integer> map = new HashMap<>();
        for (int left = 0,right = 0;right < s.length();right++){
            char r = s.charAt(right);
            //存右边的值
            map.put(r,map.getOrDefault(r,0)+1);
            while(map.get(r)>1){
                char l = s.charAt(left);
                map.put(l,map.get(l)-1);
                left++;
            }
            ans = Math.max( ans, right - left + 1);
        }
        return ans;
    }
}
